package com.adou.common.util.userauth;

import com.adou.common.util.XUtilCommon;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class interfaceUtils {

    private static final Logger logger = LoggerFactory.getLogger(interfaceUtils.class);

    private static final String HTTP_SHIROAUTH = "http://u.mysun365.com/ShiroAuth/service/";
    private static final String HTTP_SHIROAUTHUSER = "http://u.mysun365.com/ShiroAuth/user/";

    /**
     * 获取子系统用户权限
     *
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param userid     登陆用户账户
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     * JSON.data 用户权限数组
     */
    public static JSONObject getUserPermission(String csystype, String sessionkey, String userid, String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&userid=" + userid;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTH + "userPermissionRead.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }
    /**
     * 根据用户账户获取用户分配的子系统类型
     *
     * @param csystype   子系统类型
     * @param userid     用户账户
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     * JSON.data 用户权限数组
     */
    public static JSONObject getTypeByUserid(String csystype, String userid, String encoding) {
        try {
            String data = "systype=" + csystype + "&userid=" + userid;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTH + "getTypeByUserid.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 通过Memcached获取系统用户信息（无密钥的子系统调用）
     *
     * @param csystype   子系统类型
     * @param sessionkey 用户登陆会话ID
     * @param userid     用户登陆账号
     * @param ip         用户登陆ip
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     * JSON.data 用户信息
     */
    public static JSONObject getLoginInfoByAuth(String csystype, String sessionkey, String userid, String ip, String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&userid=" + userid + "&ip=" + ip;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTH + "getUserByMemcached.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 用户在子系统中权限认证
     *
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param userid     登陆用户账号
     * @param permlist   需认证的权限URL数组
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）JSON.data
     * 结果数组（与permlist参数对应），1为真，0为假
     */
    public static JSONObject checkUserPermission(String csystype, String sessionkey, String userid, String ip, String[] permlist,
                                                 String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&userid=" + userid + "&ip=" + ip;
            String tdata = "";
            for (int i = 0; i < permlist.length; i++) {
                tdata = tdata + "&permlist=" + permlist[i];
            }
            data = data + tdata;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTH + "checkPermission.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 添加用户到对应子系统角色中
     *
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param userid     登陆用户账号
     * @param uid        待添加用户唯一标识
     * @param adduserid  待添加用户账号
     * @param ctype      对应角色的类型标识
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     */
    public static JSONObject saveUserToRole(String csystype, String sessionkey, String userid, Long uid,
                                            String adduserid, String ctype, String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&userid=" + userid + "&uid=" + uid
                    + "&adduserid=" + adduserid + "&ctype=" + ctype;
            JSONObject jdata = XUtilCommon.sendPost(HTTP_SHIROAUTH + "saveUserToRole.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 添加子系统用户角色到绑定用户中
     *
     * @param binduser   绑定用户账号
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param userid     登陆用户账号
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     */
    public static JSONObject thirdRoleToBuser(String binduser, String csystype, String sessionkey, String userid,
                                              String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&userid=" + userid + "&binduser=" + binduser;
            JSONObject jdata = XUtilCommon.sendPost(HTTP_SHIROAUTH + "thirdRoleToBuser.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 获取子系统用户角色
     *
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param userid     登陆用户账号
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     */
    public static JSONObject userRoleRead(String csystype, String sessionkey, String userid, String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&userid=" + userid;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTH + "userRoleRead.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 根据部门ID获取子系统用户
     *
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param orgid      部门ID
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     */
    public static JSONObject getUserByOrgid(String csystype, String sessionkey, String userid, Long orgid, String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&orgid=" + orgid + "&userid=" + userid;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTHUSER + "getUserByOrgid.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 根据部门ID获取子系统用户
     *
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param areaid     区域ID
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     */
    public static JSONObject getUserByAreaid(String csystype, String sessionkey, String userid, Long areaid, String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&areaid=" + areaid + "&userid=" + userid;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTHUSER + "getUserByAreaid.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 根据系统用户ID获取子系统用户
     *
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param ids        系统用户ID(sysuid)
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     */
    public static JSONObject getUserBySysuids(String csystype, String sessionkey, String userid, String ids, String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&sysuids=" + ids + "&userid=" + userid;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTH + "getUserBySysuids.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

    /**
     * 根据系统用户ID发送短信
     *
     * @param csystype   子系统类型
     * @param sessionkey 登陆会话ID
     * @param sysuids    用户ID（sysuid）
     * @param template   短信模板
     * @param memo       短信参数：'code':''
     * @param encoding   编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     */
    public static JSONObject sendTelMsg(String csystype, String sessionkey, String userid, String sysuids, String template, String memo, String encoding, String ip) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&sysuids=" + sysuids + "&template=" + template + "&memo=" + memo + "&userid=" + userid + "&ip=" + ip;
            JSONObject jdata = XUtilCommon.sendGet(HTTP_SHIROAUTH + "sendTelMsg.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }


    /**
     * 从对应子系统角色中移出用户
     *
     * @param csystype     子系统类型
     * @param sessionkey   登陆会话ID
     * @param userid       登陆用户账号
     * @param removeuserid 待移除用户
     * @param ctype        对应角色的类型标识
     * @param encoding     编码格式 默认 UTF-8
     * @return 返回JSON（{result:1为成功其它为失败,msg:操作描述,sessionid:会话ID,data:数据}）
     */
    public static JSONObject removeUserToRole(String csystype, String sessionkey, String userid, String removeuserid,
                                              String ctype, String encoding) {
        try {
            String data = "systype=" + csystype + "&sessionid=" + sessionkey + "&userid=" + userid + "&removeuserid=" + removeuserid + "&ctype=" + ctype;
            JSONObject jdata = XUtilCommon.sendPost(HTTP_SHIROAUTH + "removeUserToRole.shtml", data, encoding);
            return jdata;
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
        return null;
    }

}
